package com.briup.demo.service;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.briup.demo.bean.CmsCategory;
import com.briup.demo.mapper.CmsArticleMapper;
import com.briup.demo.mapper.CmsCategoryMapper;

@Service
public class CmsCategoryService {

	@Autowired // 跟Spring容器表明，需要在运行时注入一个CmsCategoryMapper对象进来。
	private CmsCategoryMapper categoryMapper;
	
	@Autowired
	private CmsArticleMapper articleMapper;
	
	/**
	 * 批量删除栏目信息
	 */
	public String batchDelete(String[] ids) {
		//定义一个集合用来记录删除成功的数据
		ArrayList<String> suc = new ArrayList<String>();
		//定义一个集合用来记录删除失败的数据
		ArrayList<String> fail = new ArrayList<String>();
		//定义一个集合用来记录数据库中不存在的数据
		ArrayList<String> noExist = new ArrayList<String>();
		//如果用户传递的ids不为null并且长度>0
		if(ids!=null&&ids.length>0) {
			for(String id:ids) {
				int result = deleteById(id);
				if(result==-1||result==-2) {
					fail.add(id);//如果结果是-1或者-2代表删除失败。
				}else if(result==0){
					noExist.add(id);//如果返回结果为0，代表数据不存在
				}else if(result>0){
					suc.add(id);//如果返回结果大于0，代表删除成功。
				}
			}
			String str = "success:";
			if(suc.size()>0) {
				str += "成功删除了"+suc+"!";
			}
			if(fail.size()>0) {
				str += "请先删除"+fail+"栏目下的子栏目或者文章！";
			}
			if(noExist.size()>0) {
				str += "栏目"+noExist+"不存在！";
			}
			return str;
		}else {
			return "error:请输入要删除的栏目编号！";
		}
		
	}
	
	/**
	 *  按照栏目编号，删除该栏目信息。
	 * @param id 要删除的栏目编号
	 * @return
	 */
	public int deleteById(String id) {
		//要删除的栏目有可能是，某一个栏目的父栏目。
		int num = categoryMapper.selectCountRefPid(id);
		System.out.println("num:"+num);
		if(num>0) {
			return -1;//-1代表这个栏目下边有子栏目。
		}
		//要删除的栏目也有可能下边有很多关联的文章。
		num = 
			articleMapper.selectArticleCountByCategoryId(id);
		if(num>0) {
			return -2;
		}
		//如果既没有子栏目，也没有关联的文章，执行删除
		return categoryMapper.deleteByPrimaryKey(id);
	}
	
	
	public boolean saveOrUpdateCmsCategory(CmsCategory category) {
		String pid = category.getPid(); //栏目的父栏目编号
		if(pid!=null&&!"".equals(pid)) { //如果父栏目编号不为null并且也不是空字符串
			//从数据库中检索父栏目
			CmsCategory c = categoryMapper.selectByPrimaryKey(
										category.getPid());
			//如果父栏目不存在，插入失败。
			if(c==null) return false;
		}
		//如果用户传递过来的栏目信息是携带了id的，那么更新这个id所代表的栏目信息
		if(category.getId()!=null&&!"".equals(category.getId())) {
			categoryMapper.updateByPrimaryKey(category);
		}else {
			//如果用户传递过来的栏目信息没有携带id，那么将这条记录插入数据库。
			category.setId(UUID.randomUUID().toString());
			categoryMapper.insert(category);
		}
		return true;
	}
	
	
	
	
	/**
	 * 用来获取所有栏目信息，以及栏目所对应父栏目信息。
	 * @return
	 */
	public List<CmsCategory> getAllCategory(){
		//List<CmsCategory> list = categoryMapper.selectAll();
		List<CmsCategory> list = categoryMapper.allCategoryWithParent();
		if(list!=null) {
			return list;
		}
		return new ArrayList<CmsCategory>();
	}
}
